技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2022 iThome 鐵人賽
DAY
20
0
自我挑戰組
Ruby OOP to Oops !n 30
系列 第
20
篇
IT 邦鐵人賽 Day 20-Flyweight
14th鐵人賽
ruby
ruby on rails
k_sky369
2022-10-05 23:25:24
739 瀏覽
分享至
Flyweight(蠅量模式)
如果一個類別實例可以用來提供許多虛擬實例,那就使用蠅量模式。
簡言之:
多個物件共享同份狀態
情境:
五子棋遊戲
每個棋子都有標示位置的x與y以及顏色
問題:每個棋子實例都記錄著自己的狀態,而導致棋子一多時程式執行緩慢(因為內存不夠)
改善方法:只使用一個棋子實例,讓用戶端物件負責維護每個棋子的狀態
外在與內在狀態
起初設計
拆分
結果
適用情境:
生成大量相似的物件(導致內存耗盡)
對象內含有可抽取且其他對象也共享的重複狀態
好處:
減少執行期的物件數量,節省記憶體
將許多虛擬物件的狀態集中在一個位置
壞處:
類別內的每一個邏輯實例都沒辦法展現與別的實例不一樣的行為
Flyweight 與 Singleton的比較
Singleton只會有一個實體,Flyweight可以有多個
Singleton 物件的狀態為可變,而 Flyweight 物件(存放共通狀態的地方)為不可變
留言
追蹤
檢舉
上一篇
IT 邦鐵人賽 Day 19-Facade
系列文
Ruby OOP to Oops !n 30
共
20
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
16
IT 邦鐵人賽 Day 16 - Bridge
17
IT 邦鐵人賽 Day 17 - Composite
18
IT 邦鐵人賽 Day 18-Decorator
19
IT 邦鐵人賽 Day 19-Facade
20
IT 邦鐵人賽 Day 20-Flyweight
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
929
組
團體組數
32
組
累計文章數
13084
篇
完賽人數
156
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
17th鐵人賽
14th鐵人賽
12th鐵人賽
18th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
六個語言的 README,要一比一翻完整,還是只寫到「裝得起來」就好?
「相容 MySQL 協議」的引擎,你們是怎麼做能力偵測的?我們試了 42 種,結論有點慘
本地跑模型做評測,你們是怎麼給 context 長度設上限的?我們沒設,7.1 GB 的模型吃掉了 51 GB
熱門回答
六個語言的 README,要一比一翻完整,還是只寫到「裝得起來」就好?
本地跑模型做評測,你們是怎麼給 context 長度設上限的?我們沒設,7.1 GB 的模型吃掉了 51 GB
熱門文章
用 Gemini 打造《智數 Sudoku Master》網頁數獨:能推理、能拍照解答的科技結晶,只有一處美中不足?
桌面、手機、網站都要接 OAuth2 登入,能用同一套嗎?
iThome 鐵人賽的連續 30 天發文挑戰 區塊鏈與資安實戰
密碼學基礎複習:Hash、非對稱加密與數位簽章在區塊鏈的應用
講到 IT 監控,你一定聽過 SolarWinds--但你真的了解它在做些什麼嗎?
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}